[C] Decompositor de números em fatores primos

Publicado por Enzo de Brito Ferber 27/06/2007

[ Hits: 10.292 ]

Homepage: http://www.maximasonorizacao.com.br

Download decom_primes.c




Como o nome já diz, um programa escrito em C, que decompõe um número qualquer em fatores primos e exibe estes números para o usuário.

  



Esconder código-fonte

/*
 * Programa: Decompositor de numeros
 * Arquivo : decom_primes.c
 * Autor   : Enzo Ferber 'Slackware_10'
 */

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

int *lista_primos(int size){
    int prime, i=0, a, b;
    int *list = (int*)malloc(size*sizeof(int));
    if(!list){
        printf("[-] Erro ao alocar memoria.\n");
        printf("[-] Abortando...\n");
        exit(0);
    }
    for(a=2;a<size;a++){
        prime = FALSE;
        for(b=1;b<=a;b++){
            if(b == a) prime = TRUE;
            if(((a%b)==0) && (b != 1)) break;
        }
        if(prime) list[i] = a;
        if(prime) i += 1;
    }
    list[i] = 0x0;
    return list;
}

int *fatores_primos(int num){
    int *lista = lista_primos(num+1);
    int *fatores = (int*)malloc(num*sizeof(int));
    register int i;
    int div_atual, fat_atual, list_ref, ref;
    
    ref = num;
    fat_atual = 0;
    list_ref = 0;
    div_atual = lista[list_ref];
    
    for(i=0; i<num; i++){
        if(ref == 1){
            fatores[fat_atual] = 1;
            break;
        }
        if((ref % div_atual) == 0){
            ref = ref / div_atual;
            fatores[fat_atual] = div_atual;
            fat_atual++;
        }
        if((ref % div_atual) != 0) div_atual = lista[++list_ref];
    }
    
    free(lista);
    fatores[fat_atual+1] = 0x0;
    return fatores;
}

int main(int argc, char *argv[]){
    int *list;
    if(argc != 2){
        printf("[-] Uso: %s <numero_a_fatorar>\n", argv[0]);
        printf("[-] Abortando...\n");
        exit(0);
    }
    list = fatores_primos(atoi(argv[1]));
    while(*list) printf("%d\n", *list++);
    return 0;
}

    

    

Scripts recomendados

Integração numérica - Método da Quadratura Gaussiana

Sequencia Fibonacci

Sorteio

Passando parâmetros com getopt

Crescimento de bactérias


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts